9889. Произведение разностей

 

Задан массив целых чисел a1a2, ..., an. Вычислите произведение

Если Вы не знакомы с краткой формой записи, то указанное произведение равно

|a1 − a2| * |a1 − a3| * ... * |a1 − an| *

|a2 − a3| * |a2 − a4| * ... * |a2 − an| * ... * |an-1 − an|

Другими словами, это произведение |ai − aj| для всех 1 ≤ i < j ≤ n.

Так как результат будет большим, вычислите его по модулю m.

 

Вход. Первая строка содержит два целых числа n (n ≤ 105) и m (m ≤ 1000). Следующая строка содержит n целых чисел a1a2, ..., an (0 ≤ ai ≤ 109).

 

Выход. Выведите значение произведения по модулю m.

 

Пример входа

Пример выхода

5 123

4 6 12 41 71

102

 

 

РЕШЕНИЕ

циклы

 

Анализ алгоритма

Если n > m, то обязательно найдутся такие ai и aj что |ai aj| mod m = 0. Следовательно при n > m указанное произведение равно 0.

При nm вычисляем произведение при помощи двойного цикла.

 

Реализация алгоритма

Входную последовательность храним в массиве а.

 

long long a[200000];

 

Читаем входные данные.

 

scanf("%d %d", &n, &m);

for (i = 0; i < n; i++)

  scanf("%lld", &a[i]);

 

В переменной res вычисляем ответ.

 

res = 1;

 

При n > m искомое произведение равно 0.

 

if (n > m) res = 0;

else

{

 

Иначе вычисляем произведение при помощи двойного цикла.

 

  for (i = 0; i < n; i++)

  for (j = i + 1; j < n; j++)

    res = (res * abs(a[j] - a[i])) % m;

}

 

Выводим ответ.

 

printf("%lld\n", res);